Path and speed based character control

ABSTRACT

A 3D animation environment that includes an animation object is generated. A movement speed is assigned to object the 3D animation environment. An animation path containing at least first and second waypoints is generated. An animation sequence is generated by identifying a first section of the animation path connected to the first waypoint. A first animation of the animation object is generated in which the animation object moves along the first section of the path at the movement speed. A spatial gap in the animation path is identified between the first and second waypoints. A second animation of the animation object is generated in which the animation object moves, by keyframe animation, from the first waypoint to the second waypoint. A third animation of the animation object is generated in which the animation object moves along at least a second portion of the path at the movement speed.

This application claims priority to U.S. Provisional Application No.61/561,654, filed Nov. 18, 2011, entitled “Path and Speed BasedCharacter Control”, the entire contents of which are hereby incorporatedby reference.

A portion of the disclosure of this patent document contains materialwhich is subject to copyright protection. The copyright owner has noobjection to the facsimile reproduction by anyone of the patent documentor the patent disclosure, as it appears in the Patent and TrademarkOffice patent file or records, but otherwise reserves all copyrightrights whatsoever.

BACKGROUND

In the physical world, persons, animals and vehicles have ranges ofnatural speeds at which they move; for example, people typically walkand run. When a director is coordinating the movements and placements ofactors and stage items (i.e., “stage blocking”), the actual physicallimitations of actors place constraints on what actions can occur withina certain amount of time or space.

In contrast, a keyframe animation system has no intrinsic notion ofspeed, and it is up to the animator to figure out the reasonablekeyframes that will make the character move at a particular speed. Inother words, because there is no indication of speed, the animator willhave to make an educated guess, or use a calculator.

SUMMARY

This specification describes technologies relating to characteranimation. For example, a user can specify that a character is moving bywalking, as opposed to, say, by flying, running or crawling. Way pointscan be placed on the ground in a virtual environment and the system candetermine, based on the walking specification, when the characterplausibly gets to the respective way points. The system can performanimation based on this information. For example, this can provide ahybrid of keyframed and speed based animation in which a scene isanimated first by keyframe animation, then speed-based animation, thenby keyframe animation again. If the path is later modified the speedwill be maintained, or the user can specify constraints, for examplewhen a character should arrive at a particular point.

In one aspect, a computer program product is embodied in anon-transitory computer-readable storage medium and includesinstructions that when executed by a processor perform a method foranimating assets. The method includes generating a 3D animationenvironment that includes at least one animation object. The methodfurther includes assigning, to the animation object, a movement speedfor moving the animation object in the 3D animation environment. Themethod further includes generating an animation path in the 3D animationenvironment, the animation path containing at least first and secondwaypoints. The method further includes generating, after generating theanimation path, an animation sequence by identifying a first section ofthe animation path connected to the first waypoint. Generating theanimation sequence further includes, responsive to identifying the firstsection, generating a first animation of the animation object in whichthe animation object moves along the first section of the path at themovement speed. Generating the animation sequence further includesidentifying a spatial gap in the animation path between the first andsecond waypoints. Generating the animation sequence further includes,responsive to identifying the spatial gap, generating a second animationof the animation object in which the animation object moves, by keyframeanimation, from the first waypoint to the second waypoint. Generatingthe animation sequence further includes identifying a second section ofthe path connected to the second waypoint. Generating the animationsequence further includes, responsive to identifying the second sectionof the path, generating a third animation of the animation object inwhich the animation object moves along at least a second portion of thepath that begins at the second waypoint at the movement speed.

Implementations can include any, all, or none of the following features.The method includes, after generating the first animation, the secondanimation, and the third animation, editing the path; and generating,based on at least the edited path, a fourth animation that includes theanimation object moving along at least a portion the edited path at themovement speed. The method includes indicating the time in the animationsequence when the animation object will arrive at a point in the path.An edit to a location on the path results in i) a playhead moving to acorresponding location on an animation timeline and ii) a second objectin the 3D animation environment moving to a location in the 3D animationenvironment that is associated with the second object at thecorresponding location of the animation timeline. One portion of thepath is defined in the 3D animation environment based on a first frameof reference and another portion of the path is defined in the 3Danimation environment based on a second frame of reference.

In one aspect, a system includes one or more processors. The systemfurther includes a computer-readable medium having stored thereininstructions that when executed generate an animation system configuredto perform operations including generating a 3D animation environmentthat includes at least one animation object. The instructions furtherinclude assigning, to the animation object, a movement speed for movingthe animation object in the 3D animation environment. The instructionsfurther include generating an animation path in the 3D animationenvironment, the animation path containing at least first and secondwaypoints. The instructions further include generating, after generatingthe animation path, an animation sequence by identifying a first sectionof the animation path connected to the first waypoint. Generating theanimation sequence further includes, responsive to identifying the firstsection, generating a first animation of the animation object in whichthe animation object moves along the first section of the path at themovement speed. Generating the animation sequence further includesidentifying a spatial gap in the animation path between the first andsecond waypoints. Generating the animation sequence further includes,responsive to identifying the spatial gap, generating a second animationof the animation object in which the animation object moves, by keyframeanimation, from the first waypoint to the second waypoint. Generatingthe animation sequence further includes identifying a second section ofthe path connected to the second waypoint. Generating the animationsequence further includes, responsive to identifying the second sectionof the path, generating a third animation of the animation object inwhich the animation object moves along at least a second portion of thepath that begins at the second waypoint at the movement speed.

Implementations can include any, all, or none of the following features.The instructions include, after generating the first animation, thesecond animation, and the third animation, editing the path; andgenerating, based on at least the edited path, a fourth animation thatincludes the animation object moving along at least a portion the editedpath at the movement speed. The instructions include indicating the timein the animation sequence when the animation object will arrive at apoint in the path. An edit to a location on the path results in i) aplayhead moving to a corresponding location on an animation timeline andii) a second object in the 3D animation environment moving to a locationin the 3D animation environment that is associated with the secondobject at the corresponding location of the animation timeline. Oneportion of the path is defined in the 3D animation environment based ona first frame of reference and another portion of the path is defined inthe 3D animation environment based on a second frame of reference.

In one aspect, a computer-readable medium having stored thereininstructions that when executed perform a method. The method includesgenerating a 3D animation environment that includes at least oneanimation object. The method further includes assigning, to theanimation object, a movement speed for moving the animation object inthe 3D animation environment. The method further includes generating ananimation path in the 3D animation environment, the animation pathcontaining at least first and second waypoints. The method furtherincludes generating, after generating the animation path, an animationsequence by identifying a first section of the animation path connectedto the first waypoint. Generating the animation sequence furtherincludes, responsive to identifying the first section, generating afirst animation of the animation object in which the animation objectmoves along the first section of the path at the movement speed.Generating the animation sequence further includes identifying a spatialgap in the animation path between the first and second waypoints.Generating the animation sequence further includes, responsive toidentifying the spatial gap, generating a second animation of theanimation object in which the animation object moves, by keyframeanimation, from the first waypoint to the second waypoint. Generatingthe animation sequence further includes identifying a second section ofthe path connected to the second waypoint. Generating the animationsequence further includes, responsive to identifying the second sectionof the path, generating a third animation of the animation object inwhich the animation object moves along at least a second portion of thepath that begins at the second waypoint at the movement speed.

Implementations can include any, all, or none of the following features.The method includes, after generating the first animation, the secondanimation, and the third animation, editing the path; and generating,based on at least the edited path, a fourth animation that includes theanimation object moving along at least a portion the edited path at themovement speed. The method includes indicating the time in the animationsequence when the animation object will arrive at a point in the path.An edit to a location on the path results in i) a playhead moving to acorresponding location on an animation timeline and ii) a second objectin the 3D animation environment moving to a location in the 3D animationenvironment that is associated with the second object at thecorresponding location of the animation timeline. One portion of thepath is defined in the 3D animation environment based on a first frameof reference and another portion of the path is defined in the 3Danimation environment based on a second frame of reference.

The details of one or more embodiments of the subject matter describedin this specification are set forth in the accompanying drawings and thedescription below. Other features, aspects, and advantages of thesubject matter will become apparent from the description, the drawings,and the claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIGS. 1-21 show examples of character control.

FIG. 22 is a schematic diagram that shows an example of a computingsystem that can be used in connection with computer-implemented methodsand systems described in this document.

Like reference numbers and designations in the various drawings indicatelike elements.

DETAILED DESCRIPTION

This specification relates to animating characters or other objects oritems, such as in a virtual three-dimensional (3D) environment. In thefollowing description, examples of animated characters are discussed.However, other types of objects or items may be similarly animated.These other types of objects or items include, but are not limited to,virtual cameras, lighting sources, and 2D images (e.g. “sprites”).

In some implementations, a character can be designated to walk, waypoints can be placed on the ground, and the system can determine whenthe character can plausibly get to those points. Subsequentmodifications to the path can maintain the speed, or the user canspecify constraints such as when a character should arrive at aparticular point, and the system can allow that to be keyframed,achieving a hybrid of keyframed and speed based animation.

The system can provide trouble-shooting mechanisms to help work outdetails and issues in a scene, such as when a character needs to get toa particular point, but cannot plausibly run fast enough to get there.For example, if the events planned for a scene would require a characterto run at twenty miles per hour, this situation can be identified asproblematic and a user can be prompted to alter the scene.

A character can move along a path at a certain speed. Edits can be madeto the path subject to constraints. The constraints can be, for example,that the character must complete the motion at a certain speed, orwithin a certain time. Portions of the path might be constrained todifferent speeds or arrival times than other portions. If the path isedited so that its shape or length changes, the speeds can optionally berecalculated so that speeds or arrival times at certain locations can bemaintained. This can allow the user to ensure that the character will beat the right place at the right time. If the user sets up conflictingconstraints, for example an arrival time that would require thecharacter to move implausibly fast, the system can provide visualfeedback to help the user resolve those problems interactively.Additionally, the character can be made to pop from place to place atparticular times.

In some implementations, time-based editing of a scene can occur in atimeline. By making speed an integrated part of the workflow, the timingof the scene can be controlled in the 3d view, for example by changingthe speed of the character.

FIG. 1 shows a view of a virtual 3D environment that includes multiplecharacters. For one of the characters, a path 100 has been defined, asindicated by a solid arc. The character's speed can be set for theentire path. To create a path, a user clicks on the ground surface toset path points. Each path point sets a mark that the character willpass through along the path. With each click, the path is extended, andthe temporal duration of the path is increased based on the speed atwhich the character should travel. A slow speed makes for a temporallylonger travel; a fast speed makes for a temporally shorter travel. Thatis, in this example, speed determines travel duration, not the other wayaround.

FIG. 2 shows that a speed for the entire path can be adjusted at aparticular point, which can result in or be caused by a change in thelength of the path in the timeline displayed toward the bottom of theview in this example. The adjustment can be initiated using one or morecontrols in a popup window 200, to name just one example. In oneimplementation, when edits to the path are made in the 3D view, or whenadjustments are made to the travel duration in the timeline, theplayhead 202 may remain fixed in time.

In another implementation, when edits to the path are made in the 3Dview, or when adjustments are made to the travel duration in thetimeline, the playhead 202 can first be adjusted to, or stay at, the endof the path, and thereafter jump forward with each new click to maintainthe position at the end of the path. As such, the user can be providedwith feedback of what is occurring in the scene at each time.

FIG. 3 shows that the change of speed can be indicated on the path by atick mark 300. Other visual indications can be used. For example, apop-up window showing may be placed on the path showing the speed atwhich a character can traverse the path.

FIG. 4 shows a case in which a path contains two speeds. In someimplementations, if the speed of the character is changed at a mark,only the path portion after an associated bar and speedmark is adjusted.In this implementation, the character 400 is adjusted to walk slower,and the spatial configuration of the second section 402 of path has notchanged, but its corresponding timeline component 404 can be longer. Inother situations, there may be multiple speed marks along the path, eachone causing the character 400 to speed up or slow down. If the speed ofa mark that is mid-path is adjusted, only the section of the pathbarafter the mark may be affected and only until the next downstreamspeedmark.

FIG. 5 shows the completed path 500 and also that the playhead 502 hasbeen advanced by several seconds. Here, the character can remain wherehe ended his previous movement. A turn by the character can be createdusing a circle segment manipulator 504, for example as indicated.

FIG. 6 shows that a second path section 600 is created for the samecharacter. This second path section 600 may be in the same environmentas previous paths, but unrelated to the previous paths.

FIG. 7 shows that the timing of a character's movement can be adjustedby relocating (e.g., sliding) the a playhead 700 along the timeline. Forexample, a user input can slide the playhead 700 along the timeline. Inresponse, the character's location along the path 702 can be moved bythe system to location of the path 702 that corresponds to theplayhead's 700 location in the timeline.

FIG. 8 shows that the shape of the curve of the path 800 can be adjustedby clicking on one or more points 802-806 on the path and moving it orthem. The speed of the character along the path, however, can bepreserved in such a situation. The whole path 800 can be moved at once,or several points on the path can be moved together. This can allow auser to adjust the shape of the path without changing speed.

FIG. 9 shows that the playhead 900 can be moved between two pathbars 902and 904, and that a new path 906 can be created. For example, theplayhead 900 can be moved into the gap in the timeline between the twopathbars shown in FIG. 8, and a new pathbar 906 can be created at thetime selected by the playhead. If the duration of the path is too longto fit within the gap of the timeline, the pathbar 906 can be indicatedto the user as illegal. The user can then be presented with options tomodify the path. For example, some options can include increasing themovement speed of the character so that the new pathbar fits within thegap or truncating the overlapping portions of the path so that theoverlapping section is discarded.

FIG. 10 shows that when moving the pathbar in the timeline, illegalareas 1000 and 1002 can be highlighted, in this case in orange. Theareas can be identified as illegal because, for example, the pathbarsection would overlap another pathbar section in time.

FIG. 11 shows that path sections can be retimed, that is, that characterspeed can be adjusted, for example by dragging either end of thepathbar. Limits to motion can be indicated by a red zone 1100. In someimplementations, the system allows the user to make only legal edits inthe animation. For example, the end of the block cannot be moved intothe red zone in some configurations.

FIGS. 12a and 12b show that, in some implementations, when a new speedis set in the middle of a path 1200, the retiming of the path 1200 doesnot change the spatial place where the speed change occurs, only thetime 1202.

FIG. 13 shows that if the character 1300 is relocated (e.g., dragged)when the playhead 1302 is between pathbar 1304 and 1306 sections, newmarks 1308 appear in the 3d view. The character 1300 can “pop” to thoselocations at those times. This “popping” represents movements of thecharacter from one location to another without traversing a path inbetween. This may be useful, for example, when a character is off-cameraand the director does not wish to take the time to specify movementsthat will not be captured by the camera.

FIG. 14 shows that when the time of one of the marks 1400 is adjusted,all the places to which the mark cannot be moved can be marked 1402(e.g., in red). FIG. 15 shows that if dragging a point 1500 on a path1502 would cause it to overlap in time with the next section of path1502, the affected portion of the path 1502 is highlighted (e.g., turnsred) to indicate that there may be a problem. When the operation iscompleted, if the path 1502 was highlighted, the operation can becanceled, and the path 1502 can be reverted to the state before the userstarted dragging the end point 1500.

FIG. 16 shows that when there is more than one character 1600 and 1602,one or more, including all of, the character's 1600 pathbars 1604 canappear in the timeline when the character is selected. In contrast, thetimeline component for the currently non-selected character 1602 is thennot displayed.

FIG. 17 shows that if the action requires two characters 1700 and 1702to walk together, the playhead 1704 can be placed at the time the twocharacters 1700 and 1702 should start walking together, and the user canthen relocate the time block for the character 1700 that needs to beadjusted (e.g., by dragging) near the playhead 1704 until thecharacters' positions line up.

FIGS. 18A, 18B, 18C and 18D show that when the characters 1800 and 1802do not walk together, the playhead 1804 can be adjusted to where theyshould arrive together and then the faster character's 1800 time linecan be lengthened until the two characters 1800 and 1802 are essentiallysynchronized.

FIG. 19 shows an example of using two different frames of reference todefine a single animation. In some implementations, some portions of apath 1900 may be defined in a 3D animation environment based on a firstframe of reference and a second portion of the same path 1900 may bedefined based on a second frame of reference. For example, a single path1900 may be used to describe a character walking around a spaceshipwhile the spaceship is moving, then walking onto the platform when thespaceship stops at the landing strip. This path 1900 may be split intotwo sections 1900 a and 1900 b. In the first section 1900 a, the path's1900 location can be defined relative to point on the spaceship. In thesecond section 1900 b, describing the characters movement on theplatform, the path's 1900 location can be defined relative to a point onthe station, from, for example an origin point of the 3D animationenvironment.

FIG. 20 shows an example of offsetting characters from a path bothspatially and temporally.

In another configuration, one or more character position(s) may bedefined temporally relative to another character, and spatially relativeto the path itself. A path 2000 in the 3D environment can be created fora lead character 2002, and each of other characters 2004 can be definedto have a constant temporal offset from the lead character 2002. In thiscase, as the lead character 2002 moves, the other characters 2004 alsomove through the 3D environment, while maintaining essentially the samepositions relative to the lead character 2002. These characters 2004 allstart moving later than the lead character 2002, and are each alsooffset spatially from the line of the path 2000.

FIG. 21 shows yet another example of a character path defined relativeto another character, one character can ride another. For example, acartoon angel 2100 and demon 2102 can ride on the shoulders of acharacter 1204. These characters can move around the shoulders of alarger character 1204 according to a path 1206 that is describedrelative to a point on the larger characters. A change to the largercharacter's 1204 path 1206 need not propagate to the angel and demoncharacters. However, the angel and demon characters can automaticallyremain on the larger character after the edit as their path is definedrelative to the moving larger character.

FIG. 22 shows an example of a computing device 2200 and a mobilecomputing device that can be used to implement the techniques describedhere. The computing device 2200 is intended to represent various formsof digital computers, such as laptops, desktops, workstations, personaldigital assistants, servers, blade servers, mainframes, and otherappropriate computers. The mobile computing device is intended torepresent various forms of mobile devices, such as personal digitalassistants, cellular telephones, smart-phones, and other similarcomputing devices. The components shown here, their connections andrelationships, and their functions, are meant to be exemplary only, andare not meant to limit implementations of the inventions describedand/or claimed in this document.

The computing device 2200 includes a processor 2202, a memory 2204, astorage device 2206, a high-speed interface 2208 connecting to thememory 2204 and multiple high-speed expansion ports 2210, and alow-speed interface 2212 connecting to a low-speed expansion port 2214and the storage device 2206. Each of the processor 2202, the memory2204, the storage device 2206, the high-speed interface 2208, thehigh-speed expansion ports 2210, and the low-speed interface 2212, areinterconnected using various busses, and may be mounted on a commonmotherboard or in other manners as appropriate. The processor 2202 canprocess instructions for execution within the computing device 2200,including instructions stored in the memory 2204 or on the storagedevice 2206 to display graphical information for a GUI on an externalinput/output device, such as a display 2216 coupled to the high-speedinterface 2208. In other implementations, multiple processors and/ormultiple buses may be used, as appropriate, along with multiple memoriesand types of memory. Also, multiple computing devices may be connected,with each device providing portions of the necessary operations (e.g.,as a server bank, a group of blade servers, or a multi-processorsystem).

The memory 2204 stores information within the computing device 2200. Insome implementations, the memory 2204 is a volatile memory unit orunits. In some implementations, the memory 2204 is a non-volatile memoryunit or units. The memory 2204 may also be another form ofcomputer-readable medium, such as a magnetic or optical disk.

The storage device 2206 is capable of providing mass storage for thecomputing device 2200. In some implementations, the storage device 2206may be or contain a computer-readable medium, such as a floppy diskdevice, a hard disk device, an optical disk device, or a tape device, aflash memory or other similar solid state memory device, or an array ofdevices, including devices in a storage area network or otherconfigurations. A computer program product can be tangibly embodied inan information carrier. The computer program product may also containinstructions that, when executed, perform one or more methods, such asthose described above. The computer program product can also be tangiblyembodied in a computer- or machine-readable medium, such as the memory2204, the storage device 2206, or memory on the processor 2202.

The high-speed interface 2208 manages bandwidth-intensive operations forthe computing device 2200, while the low-speed interface 2212 manageslower bandwidth-intensive operations. Such allocation of functions isexemplary only. In some implementations, the high-speed interface 2208is coupled to the memory 2204, the display 2216 (e.g., through agraphics processor or accelerator), and to the high-speed expansionports 2210, which may accept various expansion cards (not shown). In theimplementation, the low-speed interface 2212 is coupled to the storagedevice 2206 and the low-speed expansion port 2214. The low-speedexpansion port 2214, which may include various communication ports(e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled toone or more input/output devices, such as a keyboard, a pointing device,a scanner, or a networking device such as a switch or router, e.g.,through a network adapter.

The computing device 2200 may be implemented in a number of differentforms, as shown in the figure. For example, it may be implemented as astandard server 2220, or multiple times in a group of such servers. Inaddition, it may be implemented in a personal computer such as a laptopcomputer 2222. It may also be implemented as part of a rack serversystem 2224. Alternatively, components from the computing device 2200may be combined with other components in a mobile device (not shown),such as a mobile computing device 2250. Each of such devices may containone or more of the computing device 2200 and the mobile computing device2250, and an entire system may be made up of multiple computing devicescommunicating with each other.

The mobile computing device 2250 includes a processor 2252, a memory2264, an input/output device such as a display 2254, a communicationinterface 2266, and a transceiver 2268, among other components. Themobile computing device 2250 may also be provided with a storage device,such as a micro-drive or other device, to provide additional storage.Each of the processor 2252, the memory 2264, the display 2254, thecommunication interface 2266, and the transceiver 2268, areinterconnected using various buses, and several of the components may bemounted on a common motherboard or in other manners as appropriate.

The processor 2252 can execute instructions within the mobile computingdevice 2250, including instructions stored in the memory 2264. Theprocessor 2252 may be implemented as a chipset of chips that includeseparate and multiple analog and digital processors. The processor 2252may provide, for example, for coordination of the other components ofthe mobile computing device 2250, such as control of user interfaces,applications run by the mobile computing device 2250, and wirelesscommunication by the mobile computing device 2250.

The processor 2252 may communicate with a user through a controlinterface 2258 and a display interface 2256 coupled to the display 2254.The display 2254 may be, for example, a TFT (Thin-Film-Transistor LiquidCrystal Display) display or an OLED (Organic Light Emitting Diode)display, or other appropriate display technology. The display interface2256 may comprise appropriate circuitry for driving the display 2254 topresent graphical and other information to a user. The control interface2258 may receive commands from a user and convert them for submission tothe processor 2252. In addition, an external interface 2262 may providecommunication with the processor 2252, so as to enable near areacommunication of the mobile computing device 2250 with other devices.The external interface 2262 may provide, for example, for wiredcommunication in some implementations, or for wireless communication inother implementations, and multiple interfaces may also be used.

The memory 2264 stores information within the mobile computing device2250. The memory 2264 can be implemented as one or more of acomputer-readable medium or media, a volatile memory unit or units, or anon-volatile memory unit or units. An expansion memory 2274 may also beprovided and connected to the mobile computing device 2250 through anexpansion interface 2272, which may include, for example, a SIMM (SingleIn Line Memory Module) card interface. The expansion memory 2274 mayprovide extra storage space for the mobile computing device 2250, or mayalso store applications or other information for the mobile computingdevice 2250. Specifically, the expansion memory 2274 may includeinstructions to carry out or supplement the processes described above,and may include secure information also. Thus, for example, theexpansion memory 2274 may be provide as a security module for the mobilecomputing device 2250, and may be programmed with instructions thatpermit secure use of the mobile computing device 2250. In addition,secure applications may be provided via the SIMM cards, along withadditional information, such as placing identifying information on theSIMM card in a non-hackable manner.

The memory may include, for example, flash memory and/or NVRAM memory(non-volatile random access memory), as discussed below. In someimplementations, a computer program product is tangibly embodied in aninformation carrier. The computer program product contains instructionsthat, when executed, perform one or more methods, such as thosedescribed above. The computer program product can be a computer- ormachine-readable medium, such as the memory 2264, the expansion memory2274, or memory on the processor 2252. In some implementations, thecomputer program product can be received in a propagated signal, forexample, over the transceiver 2268 or the external interface 2262.

The mobile computing device 2250 may communicate wirelessly through thecommunication interface 2266, which may include digital signalprocessing circuitry where necessary. The communication interface 2266may provide for communications under various modes or protocols, such asGSM voice calls (Global System for Mobile communications), SMS (ShortMessage Service), EMS (Enhanced Messaging Service), or MMS messaging(Multimedia Messaging Service), CDMA (code division multiple access),TDMA (time division multiple access), PDC (Personal Digital Cellular),WCDMA (Wideband Code Division Multiple Access), CDMA2000, or GPRS(General Packet Radio Service), among others. Such communication mayoccur, for example, through the transceiver 2268 using aradio-frequency. In addition, short-range communication may occur, suchas using a Bluetooth, WiFi, or other such transceiver (not shown). Inaddition, a GPS (Global Positioning System) receiver module 2270 mayprovide additional navigation- and location-related wireless data to themobile computing device 2250, which may be used as appropriate byapplications running on the mobile computing device 2250.

The mobile computing device 2250 may also communicate audibly using anaudio codec 2260, which may receive spoken information from a user andconvert it to usable digital information. The audio codec 2260 maylikewise generate audible sound for a user, such as through a speaker,e.g., in a handset of the mobile computing device 2250. Such sound mayinclude sound from voice telephone calls, may include recorded sound(e.g., voice messages, music files, etc.) and may also include soundgenerated by applications operating on the mobile computing device 2250.

The mobile computing device 2250 may be implemented in a number ofdifferent forms, as shown in the figure. For example, it may beimplemented as a cellular telephone 2280. It may also be implemented aspart of a smart-phone 2282, personal digital assistant, or other similarmobile device.

Various implementations of the systems and techniques described here canbe realized in digital electronic circuitry, integrated circuitry,specially designed ASICs (application specific integrated circuits),computer hardware, firmware, software, and/or combinations thereof.These various implementations can include implementation in one or morecomputer programs that are executable and/or interpretable on aprogrammable system including at least one programmable processor, whichmay be special or general purpose, coupled to receive data andinstructions from, and to transmit data and instructions to, a storagesystem, at least one input device, and at least one output device.

These computer programs (also known as programs, software, softwareapplications or code) include machine instructions for a programmableprocessor, and can be implemented in a high-level procedural and/orobject-oriented programming language, and/or in assembly/machinelanguage. As used herein, the terms machine-readable medium andcomputer-readable medium refer to any computer program product,apparatus and/or device (e.g., magnetic discs, optical disks, memory,Programmable Logic Devices (PLDs)) used to provide machine instructionsand/or data to a programmable processor, including a machine-readablemedium that receives machine instructions as a machine-readable signal.The term machine-readable signal refers to any signal used to providemachine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniquesdescribed here can be implemented on a computer having a display device(e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor)for displaying information to the user and a keyboard and a pointingdevice (e.g., a mouse or a trackball) by which the user can provideinput to the computer. Other kinds of devices can be used to provide forinteraction with a user as well; for example, feedback provided to theuser can be any form of sensory feedback (e.g., visual feedback,auditory feedback, or tactile feedback); and input from the user can bereceived in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in acomputing system that includes a back end component (e.g., as a dataserver), or that includes a middleware component (e.g., an applicationserver), or that includes a front end component (e.g., a client computerhaving a graphical user interface or a Web browser through which a usercan interact with an implementation of the systems and techniquesdescribed here), or any combination of such back end, middleware, orfront end components. The components of the system can be interconnectedby any form or medium of digital data communication (e.g., acommunication network). Examples of communication networks include alocal area network (LAN), a wide area network (WAN), and the Internet.

The computing system can include clients and servers. A client andserver are generally remote from each other and typically interactthrough a communication network. The relationship of client and serverarises by virtue of computer programs running on the respectivecomputers and having a client-server relationship to each other.

Some implementations may include some or all of the following features:A computer program product tangibly embodied in a computer-readablestorage medium and comprising instructions that when executed by aprocessor perform a method for animating assets, the method comprising:

generating a 3D animation environment that includes at least oneanimation object;

assigning, to the animation object, a first movement speed and a secondmovement speed for the animation object in the 3D animation environment;

generating a path through the 3D animation environment; and

assigning the first movement speed to a first portion of the path andthe second movement speed to a second portion of the path;

generating an animation sequence that includes the animation objectmoving along the first portion of the path at the first movement speedand moving along the second portion of the path at the second movementspeed.

A computer program product tangibly embodied in a computer-readablestorage medium and comprising instructions that when executed by aprocessor perform a method for animating assets, the method comprising:

-   -   generating a 3D animation environment that contains at least one        animation object;

assigning, to the animation object, a movement speed for the animationobject in the 3D animation environment;

generating a path through the 3D animation environment;

generating an animation sequence that includes the animation objectmoving along at least a portion the path at the movement speed;

identifying an animation rule that is violated by the animationsequence; and

visually indicating the rule violation in a graphical user interfaceconfigured to receive user input to correct the rule violation.

A method comprising:

assigning the animation object to a first location in the 3D animationenvironment at a first time and to a second location in the 3D animationenvironment at a second time;

calculating the speed at which the animation object must move to movefrom the first location at the first time to the second location at thesecond time;

responsive to determining that the speed is greater than a maximummovement speed associated with the animation object, indicating that thespeed is greater than the maximum movement speed.

A method comprising:

generating a second path through the 3D animation environment; and

responsive to determining that the path and the second path conflict,indicating that the path and the second path conflict.

What is claimed is:
 1. A computer program product embodied in anon-transitory computer-readable storage medium and comprisinginstructions that when executed by a processor perform a method foranimating assets, the method comprising: generating a 3D animationenvironment that includes at least one animation object; receiving afirst single user-specified value for a first movement speed for movingthe animation object in the 3D animation environment and a second singleuser-specified value for a second movement speed for moving theanimation object in the 3D animation environment; generating ananimation path in the 3D animation environment, the animation pathcontaining at least first and second waypoints; and generating, aftergenerating the animation path, an animation sequence by: identifying afirst section of the animation path connected to the first waypoint;responsive to identifying the first section, generating a firstanimation of the animation object in which the animation object movesalong the first section of the animation path at the firstuser-specified value for the first movement speed; identifying a spatialgap in the animation path between the first and second waypoints;responsive to identifying the spatial gap, generating a second animationof the animation object in which the animation object moves, by keyframeanimation, from the first waypoint to the second waypoint; identifying asecond section of the animation path connected to the second waypoint;and responsive to identifying the second section of the animation path,generating a third animation of the animation object in which theanimation object moves along at least a second portion of the animationpath that begins at the second waypoint at the second user-specifiedvalue of the second movement speed.
 2. The method of claim 1, the methodfurther comprising: after generating the first animation, the secondanimation, and the third animation, editing the animation path; andgenerating, based on at least the edited animation path, a fourthanimation that includes the animation object moving along at least aportion the edited animation path at the first user-specified value ofthe first movement speed.
 3. The method of claim 1, the method furthercomprising indicating the time in the animation sequence when theanimation object will arrive at a point in the animation path.
 4. Themethod of claim 1, wherein an edit to a location on the animation pathresults in i) a playhead moving to a corresponding location on ananimation timeline and ii) a second object in the 3D animationenvironment moving to a location in the 3D animation environment that isassociated with the second object at the corresponding location of theanimation timeline.
 5. The method of claim 1, wherein one portion of theanimation path is defined in the 3D animation environment based on afirst frame of reference and another portion of the animation path isdefined in the 3D animation environment based on a second frame ofreference.
 6. A system comprising: one or more processors; and acomputer-readable medium having stored therein instructions that whenexecuted generate an animation system configured to perform operationscomprising: generating a 3D animation environment that includes at leastone animation object; receiving a first single user-specified value fora first movement speed for moving the animation object in the 3Danimation environment and a second single user-specified value for asecond movement speed for moving the animation object in the 3Danimation environment; generating an animation path in the 3D animationenvironment, the animation path containing at least first and secondwaypoints; and generating, after generating the animation path, ananimation sequence by: identifying a first section of the animation pathconnected to the first waypoint; responsive to identifying the firstsection, generating a first animation of the animation object in whichthe animation object moves along the first section of the animation pathat the first user-specified value for the first movement speed;identifying a spatial gap in the animation path between the first andsecond waypoints; responsive to identifying the spatial gap, generatinga second animation of the animation object in which the animation objectmoves, by keyframe animation, from the first waypoint to the secondwaypoint; identifying a second section of the animation path connectedto the second waypoint; and responsive to identifying the second sectionof the animation path, generating a third animation of the animationobject in which the animation object moves along at least a secondportion of the animation path that begins at the second waypoint at theuser-specified value of the movement speed.
 7. The system of claim 6,the operations further comprising: after generating the first animation,the second animation, and the third animation, editing the animationpath; and generating, based on at least the edited animation path, afourth animation that includes the animation object moving along atleast a portion the edited animation path at the first user-specifiedvalue for the first movement speed.
 8. The system of claim 6, theoperations further comprising indicating the time in the animationsequence when the animation object will arrive at a point in theanimation path.
 9. The system of claim 6, wherein an edit to a locationon the animation path results in i) a playhead moving to a correspondinglocation on an animation timeline and ii) a second object in the 3Danimation environment moving to a location in the 3D animationenvironment that is associated with the second object at thecorresponding location of the animation timeline.
 10. The system ofclaim 6, wherein one portion of the animation path is defined in the 3Danimation environment based on a first frame of reference and anotherportion of the animation path is defined in the 3D animation environmentbased on a second frame of reference.
 11. A non-transitorycomputer-readable medium having stored therein instructions that whenexecuted perform a method comprising: generating a 3D animationenvironment that includes at least one animation object; receiving afirst single user-specified value for a first movement speed for movingthe animation object in the 3D animation environment and a second singleuser-specified value for a second movement speed for moving theanimation object in the 3D animation environment; generating ananimation path in the 3D animation environment, the animation pathcontaining at least first and second waypoints; and generating, aftergenerating the animation path, an animation sequence by: identifying afirst section of the animation path connected to the first waypoint;responsive to identifying the first section, generating a firstanimation of the animation object in which the animation object movesalong the first section of the animation path at the firstuser-specified value for the first movement speed; identifying a spatialgap in the animation path between the first and second waypoints;responsive to identifying the spatial gap, generating a second animationof the animation object in which the animation object moves, by keyframeanimation, from the first waypoint to the second waypoint; identifying asecond section of the animation path connected to the second waypoint;and responsive to identifying the second section of the animation path,generating a third animation of the animation object in which theanimation object moves along at least a second portion of the animationpath that begins at the second waypoint at the second user-specifiedvalue of the second movement speed.
 12. The non-transitorycomputer-readable medium of claim 11, the method further comprising:after generating the first animation, the second animation, and thethird animation, editing the animation path; and generating, based on atleast the edited animation path, a fourth animation that includes theanimation object moving along at least a portion the edited animationpath at the first user-specified value for the first movement speed. 13.The non-transitory computer-readable medium of claim 11, the methodfurther comprising indicating the time in the animation sequence whenthe animation object will arrive at a point in the animation path. 14.The non-transitory computer-readable medium of claim 11, wherein an editto a location on the animation path results in i) a playhead moving to acorresponding location on an animation timeline and ii) a second objectin the 3D animation environment moving to a location in the 3D animationenvironment that is associated with the second object at thecorresponding location of the animation timeline.
 15. The non-transitorycomputer-readable medium of claim 11, wherein one portion of theanimation path is defined in the 3D animation environment based on afirst frame of reference and another portion of the animation path isdefined in the 3D animation environment based on a second frame ofreference.